你膩
在下忍者哈...根大子
昨天大概描述了smali code的一些format
包括常數或是物件型態等等
還有方法的一些訊息
是不是public拉 有沒有帶參數進去拉
甚至回傳值是啥 型態又是什麼
那今天就來跟java code對照一下
驗證一下看smali的邏輯是不是正確
先上MainActivity的smali code
這裡看起來像是Global variable的initializtion
屬性都是private之外
mLocationListener昨天說的因為有$的關係
所以他是在MainActivity裡面的一個類別
讓我們對照Java
差不多可以適應smali了對吧
那下面是LocationListener必須實做的方法之一
onLocationChanged的smali
依照昨天的format法則
推斷他是public void onLocationChanged(Location location)
裡面也有const-string的字串"Locatoin:\n"
而且他還是透過StringBuilder去append起來的
裡面還有呼叫取得經緯度的方法
invoke-virtual {p1}, Landroid/location/Location;->getLongitude()D
return type: D 表示回傳型態為double 來表示經緯度的精確值
對照一下java code
484很會看smali了呢
之後不需要再轉成java就可以讀懂整個程式邏輯了呢
最後我還在看的時候發現
還覺得奇怪為啥要實做onPause方法
過太久了都忘記了
稍微看一下才知道原來是一些checkPermission的機制
然後後面就是因為瘋狂抓位置其實也挺消耗能源的
所以在生命週期的onPause階段先把updater關掉暫停位置的更新
那今天就比對完兩個差異性之後
相信接下來路程會順利一些QQ
我是來世胸胸的...
我們下次見